package com.learn.util.log;

import org.slf4j.Marker;

public interface Logger extends org.slf4j.Logger {

    /**
     * Log a message at the TRACE level.
     *
     * @param logType 日志类型
     * @param msg     the message string to be logged
     * @since 1.4
     */
    public void trace(int logType, String msg, Long optId, String optName);

    /**
     * Log a message at the TRACE level.
     *
     * @param logType
     * @param extData
     * @param msg
     */
    public void trace(int logType, LoggerExtData extData, String msg, Long optId, String optName);

    /**
     * Log a message at the TRACE level according to the specified format
     * and argument.
     * <p/>
     * <p>This form avoids superfluous object creation when the logger
     * is disabled for the TRACE level. </p>
     *
     * @param logType 日志类型
     * @param format  the format string
     * @param arg     the argument
     * @since 1.4
     */
    public void trace(int logType, String format, Object arg, Long optId, String optName);

    public void trace(int logType, LoggerExtData extData, String format, Object arg, Long optId, String optName);

    /**
     * Log a message at the TRACE level according to the specified format
     * and arguments.
     * <p/>
     * <p>This form avoids superfluous object creation when the logger
     * is disabled for the TRACE level. </p>
     *
     * @param logType 日志类型
     * @param format  the format string
     * @param arg1    the first argument
     * @param arg2    the second argument
     * @since 1.4
     */
    public void trace(int logType, String format, Object arg1, Object arg2, Long optId, String optName);

    public void trace(int logType, LoggerExtData extData, String format, Object arg1, Object arg2, Long optId, String optName);

    /**
     * Log a message at the TRACE level according to the specified format
     * and arguments.
     * <p/>
     * <p>This form avoids superfluous string concatenation when the logger
     * is disabled for the TRACE level. However, this variant incurs the hidden
     * (int logType, and relatively small) cost of creating an <code>Object[]</code> before invoking the method,
     * even if this logger is disabled for TRACE. The variants taking {@link #trace(int, String, Object) one} and
     * {@link #trace(int, String, Object, Object) two} arguments exist solely in order to avoid this hidden cost.</p>
     *
     * @param logType   日志类型
     * @param format    the format string
     * @param arguments a list of 3 or more arguments
     * @since 1.4
     */
    public void trace(int logType, String format, Long optId, String optName, Object... arguments);

    public void trace(int logType, LoggerExtData extData, String format, Long optId, String optName, Object... arguments);

    /**
     * Log an exception (int, throwable) at the TRACE level with an
     * accompanying message.
     *
     * @param logType 日志类型
     * @param msg     the message accompanying the exception
     * @param t       the exception (logType, throwable) to log
     * @since 1.4
     */
    public void trace(int logType, String msg, Throwable t, Long optId, String optName);

    public void trace(int logType, LoggerExtData extData, String msg, Throwable t, Long optId, String optName);

    /**
     * Log a message with the specific Marker at the TRACE level.
     *
     * @param logType 日志类型
     * @param marker  the marker data specific to this log statement
     * @param msg     the message string to be logged
     * @since 1.4
     */
    public void trace(int logType, Marker marker, String msg, Long optId, String optName);

    public void trace(int logType, LoggerExtData extData, Marker marker, String msg, Long optId, String optName);

    /**
     * This method is similar to {@link #trace(int, String, Object)} method except that the
     * marker data is also taken into consideration.
     *
     * @param logType 日志类型
     * @param marker  the marker data specific to this log statement
     * @param format  the format string
     * @param arg     the argument
     * @since 1.4
     */
    public void trace(int logType, Marker marker, String format, Object arg, Long optId, String optName);

    public void trace(int logType, LoggerExtData extData, Marker marker, String format, Object arg, Long optId, String optName);

    /**
     * This method is similar to {@link #trace(int, String, Object, Object)}
     * method except that the marker data is also taken into
     * consideration.
     *
     * @param logType 日志类型
     * @param marker  the marker data specific to this log statement
     * @param format  the format string
     * @param arg1    the first argument
     * @param arg2    the second argument
     * @since 1.4
     */
    public void trace(int logType, Marker marker, String format, Object arg1, Object arg2, Long optId, String optName);

    public void trace(int logType, LoggerExtData extData, Marker marker, String format, Object arg1, Object arg2, Long optId, String optName);

    /**
     * This method is similar to {@link #trace(int, String, Object...)}
     * method except that the marker data is also taken into
     * consideration.
     *
     * @param logType  日志类型
     * @param marker   the marker data specific to this log statement
     * @param format   the format string
     * @param argArray an array of arguments
     * @since 1.4
     */
    public void trace(int logType, Marker marker, String format, Long optId, String optName, Object... argArray);

    public void trace(int logType, LoggerExtData extData, Marker marker, String format, Long optId, String optName, Object... argArray);

    /**
     * This method is similar to {@link #trace(int, String, Throwable)} method except that the
     * marker data is also taken into consideration.
     *
     * @param logType 日志类型
     * @param marker  the marker data specific to this log statement
     * @param msg     the message accompanying the exception
     * @param t       the exception (logType, throwable) to log
     * @since 1.4
     */
    public void trace(int logType, Marker marker, String msg, Throwable t, Long optId, String optName);

    public void trace(int logType, LoggerExtData extData, Marker marker, String msg, Throwable t, Long optId, String optName);

    /**
     * Log a message at the DEBUG level.
     *
     * @param logType 日志类型
     * @param msg     the message string to be logged
     */
    public void debug(int logType, String msg, Long optId, String optName);

    public void debug(int logType, LoggerExtData extData, String msg, Long optId, String optName);

    /**
     * Log a message at the DEBUG level according to the specified format
     * and argument.
     * <p/>
     * <p>This form avoids superfluous object creation when the logger
     * is disabled for the DEBUG level. </p>
     *
     * @param logType 日志类型
     * @param format  the format string
     * @param arg     the argument
     */
    public void debug(int logType, String format, Object arg, Long optId, String optName);

    public void debug(int logType, LoggerExtData extData, String format, Object arg, Long optId, String optName);

    /**
     * Log a message at the DEBUG level according to the specified format
     * and arguments.
     * <p/>
     * <p>This form avoids superfluous object creation when the logger
     * is disabled for the DEBUG level. </p>
     *
     * @param logType 日志类型
     * @param format  the format string
     * @param arg1    the first argument
     * @param arg2    the second argument
     */
    public void debug(int logType, String format, Object arg1, Object arg2, Long optId, String optName);

    public void debug(int logType, LoggerExtData extData, String format, Object arg1, Object arg2, Long optId, String optName);

    /**
     * Log a message at the DEBUG level according to the specified format
     * and arguments.
     * <p/>
     * <p>This form avoids superfluous string concatenation when the logger
     * is disabled for the DEBUG level. However, this variant incurs the hidden
     * (and relatively small) cost of creating an <code>Object[]</code> before invoking the method,
     * even if this logger is disabled for DEBUG. The variants taking
     * {@link #debug(int, String, Object) one} and {@link #debug(int, String, Object, Object) two}
     * arguments exist solely in order to avoid this hidden cost.</p>
     *
     * @param logType   日志类型
     * @param format    the format string
     * @param arguments a list of 3 or more arguments
     */
    public void debug(int logType, String format, Long optId, String optName, Object... arguments);

    public void debug(int logType, LoggerExtData extData, String format, Long optId, String optName, Object... arguments);

    /**
     * Log an exception (logType, throwable) at the DEBUG level with an
     * accompanying message.
     *
     * @param logType 日志类型
     * @param msg     the message accompanying the exception
     * @param t       the exception (logType, throwable) to log
     */
    public void debug(int logType, String msg, Throwable t, Long optId, String optName);

    public void debug(int logType, LoggerExtData extData, String msg, Throwable t, Long optId, String optName);

    /**
     * Log a message with the specific Marker at the DEBUG level.
     *
     * @param logType 日志类型
     * @param marker  the marker data specific to this log statement
     * @param msg     the message string to be logged
     */
    public void debug(int logType, Marker marker, String msg, Long optId, String optName);

    public void debug(int logType, LoggerExtData extData, Marker marker, String msg, Long optId, String optName);

    /**
     * This method is similar to {@link #debug(int, String, Object)} method except that the
     * marker data is also taken into consideration.
     *
     * @param logType 日志类型
     * @param marker  the marker data specific to this log statement
     * @param format  the format string
     * @param arg     the argument
     */
    public void debug(int logType, Marker marker, String format, Object arg, Long optId, String optName);

    public void debug(int logType, LoggerExtData extData, Marker marker, String format, Object arg, Long optId, String optName);

    /**
     * This method is similar to {@link #debug(int, String, Object, Object)}
     * method except that the marker data is also taken into
     * consideration.
     *
     * @param logType 日志类型
     * @param marker  the marker data specific to this log statement
     * @param format  the format string
     * @param arg1    the first argument
     * @param arg2    the second argument
     */
    public void debug(int logType, Marker marker, String format, Object arg1, Object arg2, Long optId, String optName);

    public void debug(int logType, LoggerExtData extData, Marker marker, String format, Object arg1, Object arg2, Long optId, String optName);

    /**
     * This method is similar to {@link #debug(int, String, Object...)}
     * method except that the marker data is also taken into
     * consideration.
     *
     * @param logType   日志类型
     * @param marker    the marker data specific to this log statement
     * @param format    the format string
     * @param arguments a list of 3 or more arguments
     */
    public void debug(int logType, Marker marker, String format, Long optId, String optName, Object... arguments);

    public void debug(int logType, LoggerExtData extData, Marker marker, String format, Long optId, String optName, Object... arguments);


    /**
     * This method is similar to {@link #debug(int, String, Throwable)} method except that the
     * marker data is also taken into consideration.
     *
     * @param logType 日志类型
     * @param marker  the marker data specific to this log statement
     * @param msg     the message accompanying the exception
     * @param t       the exception (logType, throwable) to log
     */
    public void debug(int logType, Marker marker, String msg, Throwable t, Long optId, String optName);

    public void debug(int logType, LoggerExtData extData, Marker marker, String msg, Throwable t, Long optId, String optName);

    /**
     * Log a message at the INFO level.
     *
     * @param logType 日志类型
     * @param msg     the message string to be logged
     */
    public void info(int logType, String msg, Long optId, String optName);

    public void info(int logType, LoggerExtData extData, String msg, Long optId, String optName);

    /**
     * Log a message at the INFO level according to the specified format
     * and argument.
     * <p/>
     * <p>This form avoids superfluous object creation when the logger
     * is disabled for the INFO level. </p>
     *
     * @param logType 日志类型
     * @param format  the format string
     * @param arg     the argument
     */
    public void info(int logType, String format, Object arg, Long optId, String optName);

    public void info(int logType, LoggerExtData extData, String format, Object arg, Long optId, String optName);

    /**
     * Log a message at the INFO level according to the specified format
     * and arguments.
     * <p/>
     * <p>This form avoids superfluous object creation when the logger
     * is disabled for the INFO level. </p>
     *
     * @param logType 日志类型
     * @param format  the format string
     * @param arg1    the first argument
     * @param arg2    the second argument
     */
    public void info(int logType, String format, Object arg1, Object arg2, Long optId, String optName);

    public void info(int logType, LoggerExtData extData, String format, Object arg1, Object arg2, Long optId, String optName);

    /**
     * Log a message at the INFO level according to the specified format
     * and arguments.
     * <p/>
     * <p>This form avoids superfluous string concatenation when the logger
     * is disabled for the INFO level. However, this variant incurs the hidden
     * (int logType, and relatively small) cost of creating an <code>Object[]</code> before invoking the method,
     * even if this logger is disabled for INFO. The variants taking
     * {@link #info(int, String, Object) one} and {@link #info(int, String, Object, Object) two}
     * arguments exist solely in order to avoid this hidden cost.</p>
     *
     * @param logType   日志类型
     * @param format    the format string
     * @param arguments a list of 3 or more arguments
     */
    public void info(int logType, String format, Long optId, String optName, Object... arguments);

    public void info(int logType, LoggerExtData extData, String format, Long optId, String optName, Object... arguments);

    /**
     * Log an exception (int, throwable) at the INFO level with an
     * accompanying message.
     *
     * @param logType 日志类型
     * @param msg     the message accompanying the exception
     * @param t       the exception (logType, throwable) to log
     */
    public void info(int logType, String msg, Throwable t, Long optId, String optName);

    public void info(int logType, LoggerExtData extData, String msg, Throwable t, Long optId, String optName);

    /**
     * Log a message with the specific Marker at the INFO level.
     *
     * @param logType 日志类型
     * @param marker  The marker specific to this log statement
     * @param msg     the message string to be logged
     */
    public void info(int logType, Marker marker, String msg, Long optId, String optName);

    public void info(int logType, LoggerExtData extData, Marker marker, String msg, Long optId, String optName);

    /**
     * This method is similar to {@link #info(int, String, Object)} method except that the
     * marker data is also taken into consideration.
     *
     * @param logType 日志类型
     * @param marker  the marker data specific to this log statement
     * @param format  the format string
     * @param arg     the argument
     */
    public void info(int logType, Marker marker, String format, Object arg, Long optId, String optName);

    public void info(int logType, LoggerExtData extData, Marker marker, String format, Object arg, Long optId, String optName);

    /**
     * This method is similar to {@link #info(int, String, Object, Object)}
     * method except that the marker data is also taken into
     * consideration.
     *
     * @param logType 日志类型
     * @param marker  the marker data specific to this log statement
     * @param format  the format string
     * @param arg1    the first argument
     * @param arg2    the second argument
     */
    public void info(int logType, Marker marker, String format, Object arg1, Object arg2, Long optId, String optName);

    public void info(int logType, LoggerExtData extData, Marker marker, String format, Object arg1, Object arg2, Long optId, String optName);

    /**
     * This method is similar to {@link #info(int, String, Object...)}
     * method except that the marker data is also taken into
     * consideration.
     *
     * @param logType   日志类型
     * @param marker    the marker data specific to this log statement
     * @param format    the format string
     * @param arguments a list of 3 or more arguments
     */
    public void info(int logType, Marker marker, String format, Long optId, String optName, Object... arguments);

    public void info(int logType, LoggerExtData extData, Marker marker, String format, Long optId, String optName, Object... arguments);

    /**
     * This method is similar to {@link #info(int, String, Throwable)} method
     * except that the marker data is also taken into consideration.
     *
     * @param logType 日志类型
     * @param marker  the marker data for this log statement
     * @param msg     the message accompanying the exception
     * @param t       the exception (logType, throwable) to log
     */
    public void info(int logType, Marker marker, String msg, Throwable t, Long optId, String optName);

    public void info(int logType, LoggerExtData extData, Marker marker, String msg, Throwable t, Long optId, String optName);

    /**
     * Log a message at the WARN level.
     *
     * @param logType 日志类型
     * @param msg     the message string to be logged
     */
    public void warn(int logType, String msg, Long optId, String optName);

    public void warn(int logType, LoggerExtData extData, String msg, Long optId, String optName);

    /**
     * Log a message at the WARN level according to the specified format
     * and argument.
     * <p/>
     * <p>This form avoids superfluous object creation when the logger
     * is disabled for the WARN level. </p>
     *
     * @param logType 日志类型
     * @param format  the format string
     * @param arg     the argument
     */
    public void warn(int logType, String format, Object arg, Long optId, String optName);

    public void warn(int logType, LoggerExtData extData, String format, Object arg, Long optId, String optName);


    /**
     * Log a message at the WARN level according to the specified format
     * and arguments.
     * <p/>
     * <p>This form avoids superfluous string concatenation when the logger
     * is disabled for the WARN level. However, this variant incurs the hidden
     * (int logType, and relatively small) cost of creating an <code>Object[]</code> before invoking the method,
     * even if this logger is disabled for WARN. The variants taking
     * {@link #warn(int, String, Object) one} and {@link #warn(int, String, Object, Object) two}
     * arguments exist solely in order to avoid this hidden cost.</p>
     *
     * @param logType   日志类型
     * @param format    the format string
     * @param arguments a list of 3 or more arguments
     */
    public void warn(int logType, String format, Long optId, String optName, Object... arguments);

    public void warn(int logType, LoggerExtData extData, String format, Long optId, String optName, Object... arguments);

    /**
     * Log a message at the WARN level according to the specified format
     * and arguments.
     * <p/>
     * <p>This form avoids superfluous object creation when the logger
     * is disabled for the WARN level. </p>
     *
     * @param logType 日志类型
     * @param format  the format string
     * @param arg1    the first argument
     * @param arg2    the second argument
     */
    public void warn(int logType, String format, Object arg1, Object arg2, Long optId, String optName);

    public void warn(int logType, LoggerExtData extData, String format, Object arg1, Object arg2, Long optId, String optName);

    /**
     * Log an exception (int, throwable) at the WARN level with an
     * accompanying message.
     *
     * @param logType 日志类型
     * @param msg     the message accompanying the exception
     * @param t       the exception (logType, throwable) to log
     */
    public void warn(int logType, String msg, Throwable t, Long optId, String optName);

    public void warn(int logType, LoggerExtData extData, String msg, Throwable t, Long optId, String optName);

    /**
     * Log a message with the specific Marker at the WARN level.
     *
     * @param logType 日志类型
     * @param marker  The marker specific to this log statement
     * @param msg     the message string to be logged
     */
    public void warn(int logType, Marker marker, String msg, Long optId, String optName);

    public void warn(int logType, LoggerExtData extData, Marker marker, String msg, Long optId, String optName);

    /**
     * This method is similar to {@link #warn(int, String, Object)} method except that the
     * marker data is also taken into consideration.
     *
     * @param logType 日志类型
     * @param marker  the marker data specific to this log statement
     * @param format  the format string
     * @param arg     the argument
     */
    public void warn(int logType, Marker marker, String format, Object arg, Long optId, String optName);

    public void warn(int logType, LoggerExtData extData, Marker marker, String format, Object arg, Long optId, String optName);

    /**
     * This method is similar to {@link #warn(int, String, Object, Object)}
     * method except that the marker data is also taken into
     * consideration.
     *
     * @param logType 日志类型
     * @param marker  the marker data specific to this log statement
     * @param format  the format string
     * @param arg1    the first argument
     * @param arg2    the second argument
     */
    public void warn(int logType, Marker marker, String format, Object arg1, Object arg2, Long optId, String optName);

    public void warn(int logType, LoggerExtData extData, Marker marker, String format, Object arg1, Object arg2, Long optId, String optName);

    /**
     * This method is similar to {@link #warn(int, String, Object...)}
     * method except that the marker data is also taken into
     * consideration.
     *
     * @param logType   日志类型
     * @param marker    the marker data specific to this log statement
     * @param format    the format string
     * @param arguments a list of 3 or more arguments
     */
    public void warn(int logType, Marker marker, String format, Long optId, String optName, Object... arguments);

    public void warn(int logType, LoggerExtData extData, Marker marker, String format, Long optId, String optName, Object... arguments);

    /**
     * This method is similar to {@link #warn(int, String, Throwable)} method
     * except that the marker data is also taken into consideration.
     *
     * @param logType 日志类型
     * @param marker  the marker data for this log statement
     * @param msg     the message accompanying the exception
     * @param t       the exception (logType, throwable) to log
     */
    public void warn(int logType, Marker marker, String msg, Throwable t, Long optId, String optName);

    public void warn(int logType, LoggerExtData extData, Marker marker, String msg, Throwable t, Long optId, String optName);

    /**
     * Log a message at the ERROR level.
     *
     * @param logType 日志类型
     * @param msg     the message string to be logged
     */
    public void error(int logType, String msg, Long optId, String optName);

    public void error(int logType, LoggerExtData extData, String msg, Long optId, String optName);

    /**
     * Log a message at the ERROR level according to the specified format
     * and argument.
     * <p/>
     * <p>This form avoids superfluous object creation when the logger
     * is disabled for the ERROR level. </p>
     *
     * @param logType 日志类型
     * @param format  the format string
     * @param arg     the argument
     */
    public void error(int logType, String format, Object arg, Long optId, String optName);

    public void error(int logType, LoggerExtData extData, String format, Object arg, Long optId, String optName);

    /**
     * Log a message at the ERROR level according to the specified format
     * and arguments.
     * <p/>
     * <p>This form avoids superfluous object creation when the logger
     * is disabled for the ERROR level. </p>
     *
     * @param logType 日志类型
     * @param format  the format string
     * @param arg1    the first argument
     * @param arg2    the second argument
     */
    public void error(int logType, String format, Object arg1, Object arg2, Long optId, String optName);

    public void error(int logType, LoggerExtData extData, String format, Object arg1, Object arg2, Long optId, String optName);

    /**
     * Log a message at the ERROR level according to the specified format
     * and arguments.
     * <p/>
     * <p>This form avoids superfluous string concatenation when the logger
     * is disabled for the ERROR level. However, this variant incurs the hidden
     * (int logType, and relatively small) cost of creating an <code>Object[]</code> before invoking the method,
     * even if this logger is disabled for ERROR. The variants taking
     * {@link #error(int, String, Object) one} and {@link #error(int, String, Object, Object) two}
     * arguments exist solely in order to avoid this hidden cost.</p>
     *
     * @param logType   日志类型
     * @param format    the format string
     * @param arguments a list of 3 or more arguments
     */
    public void error(int logType, String format, Long optId, String optName, Object... arguments);

    public void error(int logType, LoggerExtData extData, String format, Long optId, String optName, Object... arguments);

    /**
     * Log an exception (int logType, throwable) at the ERROR level with an
     * accompanying message.
     *
     * @param logType 日志类型
     * @param msg     the message accompanying the exception
     * @param t       the exception (logType, throwable) to log
     */
    public void error(int logType, String msg, Throwable t, Long optId, String optName);

    public void error(int logType, LoggerExtData extData, String msg, Throwable t, Long optId, String optName);

    /**
     * Log a message with the specific Marker at the ERROR level.
     *
     * @param logType 日志类型
     * @param marker  The marker specific to this log statement
     * @param msg     the message string to be logged
     */
    public void error(int logType, Marker marker, String msg, Long optId, String optName);

    public void error(int logType, LoggerExtData extData, Marker marker, String msg, Long optId, String optName);

    /**
     * This method is similar to {@link #error(int, String, Object)} method except that the
     * marker data is also taken into consideration.
     *
     * @param logType 日志类型
     * @param marker  the marker data specific to this log statement
     * @param format  the format string
     * @param arg     the argument
     */
    public void error(int logType, Marker marker, String format, Object arg, Long optId, String optName);

    public void error(int logType, LoggerExtData extData, Marker marker, String format, Object arg, Long optId, String optName);

    /**
     * This method is similar to {@link #error(int, String, Object, Object)}
     * method except that the marker data is also taken into
     * consideration.
     *
     * @param logType 日志类型
     * @param marker  the marker data specific to this log statement
     * @param format  the format string
     * @param arg1    the first argument
     * @param arg2    the second argument
     */
    public void error(int logType, Marker marker, String format, Object arg1, Object arg2, Long optId, String optName);

    public void error(int logType, LoggerExtData extData, Marker marker, String format, Object arg1, Object arg2, Long optId, String optName);

    /**
     * This method is similar to {@link #error(int, String, Object...)}
     * method except that the marker data is also taken into
     * consideration.
     *
     * @param logType   日志类型
     * @param marker    the marker data specific to this log statement
     * @param format    the format string
     * @param arguments a list of 3 or more arguments
     */
    public void error(int logType, Marker marker, String format, Long optId, String optName, Object... arguments);

    public void error(int logType, LoggerExtData extData, Marker marker, String format, Long optId, String optName, Object... arguments);


    /**
     * This method is similar to {@link #error(int, String, Throwable)}
     * method except that the marker data is also taken into
     * consideration.
     *
     * @param logType 日志类型
     * @param marker  the marker data specific to this log statement
     * @param msg     the message accompanying the exception
     * @param t       the exception (logType, throwable) to log
     */
    public void error(int logType, Marker marker, String msg, Throwable t, Long optId, String optName);

    public void error(int logType, LoggerExtData extData, Marker marker, String msg, Throwable t, Long optId, String optName);

}
